//获取包名
package com.codeyang.controller.system;/**
 * 描述: TO-删除标志-DO
 *
 * @author CodeYang_Site
 * @version 2021/5/6 21:23
 */
//设置一个实体变量获取我们输入的类名
//小驼峰变量

import com.codeyang.domain.User;
import com.codeyang.dto.MenuDto;
import com.codeyang.service.MenuService;
import com.codeyang.utils.AjaxResult;
import com.codeyang.utils.ShiroSecurityUtils;
import com.codeyang.vo.DataGridView;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.List;

@RestController
@RequestMapping("/system/menu")
public class MenuController {

    @Autowired
    private MenuService menuService;


    /**
     * 菜单的全查询
     * 组装菜单交给前端了
     * @return
     */
    @GetMapping("/listAllMenus")
    public AjaxResult listAllMenus(){

        return AjaxResult.success(menuService.list(null));
    }

    /**
     * 查询菜单树
     * @return
     */
    @GetMapping("/selectMenuTree")
    public AjaxResult selectMenuTree(){
        return AjaxResult.success(menuService.list(null));
    }

    /**
     * 分页查询
     *
     * @return
     */
    @GetMapping("/listForPage")
    public AjaxResult listForPage(MenuDto menuDto) {
        DataGridView dataGridView = menuService.lisPage(menuDto);
        return AjaxResult.success("数据加载成功", dataGridView.getData(), dataGridView.getTotal());
    }


    /**
     * 新增数据
     *
     * @param menuDto 新增数据
     * @return 是否新增成功
     */
    @PostMapping("/addMenu")
    public AjaxResult addMenu(@Validated MenuDto menuDto) {
        menuDto.setSimpleUser(ShiroSecurityUtils.getCurrentSimpleUser());
        boolean isSaveOk = menuService.saveMenu(menuDto);
        return isSaveOk ? AjaxResult.success() : AjaxResult.fail("新增失败");
    }

    /**
     * 修改
     *
     * @param menuDto 要修改的数据
     * @return 是否修改成功
     */
    @PutMapping("/updateMenu")
    public AjaxResult updateMenu(@Validated MenuDto menuDto) {
        menuDto.setSimpleUser(ShiroSecurityUtils.getCurrentSimpleUser());

        boolean flage = menuService.updateMenu(menuDto);
        return flage ? AjaxResult.success() : AjaxResult.fail("修改失败");

    }

    /**
     * 删除数据
     *
     * @param ids 根据id删除数据
     * @return 是否删除成功
     */
    @DeleteMapping("/deleteMenuByIds/{ids}")
    public AjaxResult deleteMenuByIds(@PathVariable("ids") Long[] ids) {
        boolean flag = menuService.removeByIds(Arrays.asList(ids));
        return flag ? AjaxResult.success() : AjaxResult.fail("删除失败");
    }

    /**
     * 根据id查询数据
     *
     * @param id 数据的id
     * @return 数据的实体
     */
    @GetMapping("/getOne/{id}")
    public AjaxResult getOne(@PathVariable("id") Long id) {
        return AjaxResult.success(menuService.getById(id));
    }


    /**
     * 根据角色id查询菜单id列表
     * @param roleId
     * @return
     */
    @GetMapping("/getMenuIdsByRoleId/{roleId}")
    public AjaxResult getMenuIdsByRoleId(@PathVariable("roleId")Long roleId){

        List<Long> menuIds = menuService.getMenuIdsByRoleId(roleId);

        return AjaxResult.success(menuIds);

    }


}
